
App({

  API_BASE_URL: 'http://192.168.1.5:18080', 

  globalData: {
    isConnected: true,
    appid: 'wxcae3da12efc3afef'
  },

  /**
   * 封装网络请求方法
   * @param {string} url - 接口路径（不包含域名）
   * @param {boolean} needSubDomain - 是否需要子域名（此处暂未使用）
   * @param {string} method - HTTP 请求方法 (GET / POST)
   * @param {object} data - 请求参数
   */
  request(url, method, data) {
    var _url = this.API_BASE_URL + url;
    var header = {
      'Content-Type': 'application/json'
    };

    return new Promise((resolve, reject) => {
      wx.request({
        url: _url,
        method: method,
        data: data,
        header: header,
        success: (res) => {
          resolve(res.data);
        },
        fail: (err) => {
          reject(err);
        },
        complete: () => {
          // 请求结束，无论成功失败都会执行
        }
      });
    });
  },


  /**
   * 判断一个字符串是否为空
   * @param {any} str 要检查的值
   * @returns {boolean} true 为空，false 不为空
   */
  isEmptyString(str) {
    // 1. null / undefined
    if (str === null || str === undefined) {
      return true;
    }
    // 2. 非字符串类型，先转成字符串（防止数字/对象出错）
    if (typeof str !== 'string') {
      try {
        str = String(str);
      } catch (e) {
        return true; // 无法转为字符串直接认为是空
      }
    }
    // 3. 去掉前后空白字符（空格、换行、制表符等）
    if (str.trim().length === 0) {
      return true;
    }
    return false;
  },

  /**
   * 获取文件url
   * @param {文件名} file 
   */
  getFileUrl(file){
    return this.API_BASE_URL + '/file/preview/' + file
  },

  getCategory() {
    return this.request('/category/all', 'GET', {})
      .then(data => {
        if (data.code === 0) {
          return data;  // resolve 正常数据
        } else {
          wx.showToast({
            title: data.msg || '请求失败',
            icon: 'none'
          });
          return Promise.reject(data);
        }
      })
      .catch(err => {
        wx.showToast({
          title: '服务繁忙',
          icon: 'none'
        });
        return Promise.reject(err);
      });
  },

  /**
   * 如果没有此用户，新增一个
   * @param {获取的openId} openId 
   */
  addUser(openId){
    var _this = this;
    _this.request('/user/add', 'POST', {
      openId: openId
    }).then(data => {
      wx.setStorageSync('nickName', data.user.nickName);
      wx.setStorageSync('avatarUrl', data.user.avatarUrl);
      wx.setStorageSync('openId', openId);
      wx.showToast({
        title: '登录成功',
        icon: 'none' 
      })
    }).catch(err => {
      console.error('登录失败', err);
    });
  },

  /**
   * 调用wx接口获取code
   */
  wxLogin(){
    var _this = this;
    wx.login({
      success(res) { 
        _this.login(res.code);
      }, 
      fail() {
        wx.showToast({
          title: '获取code失败',
          icon: 'none'
        })
        return resolve('获取code失败')
      }
    })
  },

  /**
   * 调用自己服务获取微信信息
   * @param {微信接口获取的code} code 
   */
  login(code){
    var appid = this.globalData.appid;
    var _this = this;
    this.request('/wx/user/'+appid+'/login', 'GET', {
      code: code
    }).then(data => {
      if(data.user == null){
        _this.addUser(data.session.openid);
      }else{
        wx.setStorageSync('nickName', data.user.nickName);
        wx.setStorageSync('avatarUrl', data.user.avatarUrl);
        wx.setStorageSync('openId', data.session.openid);
      }
    }).catch(err => {
      console.error('登录失败', err);
    });
  },
  
})